Elixir をやってきた者が Scala を暫くやってみて同じ所と違ふ所を舉げる
ネタElixir をやってきた者が Scala を暫くやってみて同じ所と違ふ所を舉げる - c4se記:さっちゃんですよ☆
はてなエンジニア Advent Calendar 2019 - Qiita
同じ
函數型言語
actor model による parallelism
OTP or Akka
ClojureClojure.iconとの違ひ
ClojureClojure.iconはcore.async
ErlangErlang.icon or JavaJava.icon の資產が自然に使へる
Scala.jsScala.icon、ElixirScriptElixir.icon
ScalaScala.icon には ScalaNativeScala.icon も有る
cloudozer/ling: Erlang on Xen
Erlang on XenErlang.icon
Unikernel
dead
lumen/lumen: An alternative BEAM implementation, designed for WebAssembly
active
bettio/AtomVM: Tiny Erlang VM
active
List of Java virtual machines - Wikipedia
immutable data
JavaJava.icon の世界に踏み出さなければ
ElixirElixir.icon には val は無い
ErlangErlang.icon には var が無い
他に似たもの
ClojureClojure.icon
/funisaya/Clojure
函數型言語
JVMJava.icon, CLR, ECMAScriptECMAScript.icon, Erlang VMErlang.iconで動く
STM (software transactional memory)
標準 library
主に read なら使へる
core.async は π計算
core.* はほぼ標準 library (と云ふ事にしてくれ)
channel に內部構造を持たせられる
immutable data
型無しλ計算
clojure.spec/core.typed で型注釋を附けて靜的検査は出來る。表現力は低い
PonyPony.icon
actor model
actor に型が附く
immutable data
型の表現力は低い
native compile
GoGo.icon, CrystalCrystal.icon
π計算
mutable data
型の表現力は低い
native compile
CrystalCrystal.icon は OOP
違ひ
ScalaScala.icon : 表現力の高い型 system
「型安全」といふ言葉を使ふな。C、C++ 以外のよく見る殆どの言語は型安全だ
だうやって型安全性を實現するか
compile 時、實行時
名が型を持つか否か
型 system の表現力
ElixirElixir.icon は @spec と Dialyzer の success typing
ScalaScala.icon は H-M ではないのだなぁと知ってはゐるけど H-M だと思って暮らしてゐる
ElixirElixir.icon : VM level の parallelism support & 強制
ScalaScala.icon は根本的な support が無いが強制されない
竝列性の實現法が色々有るの便利
Akka
syncronized & volatile
JavaJava.icon の thread safe な class
ScalaSMT
但し ETS、DETS や persistent_term で同等のものを作れる
適當に Future を投げてはいけない
await しないECMAScriptECMAScript.icon の Promise と同じ。組織しませう
ErlangErlang.icon の Application 便利だった。必ず有るから
ElixirElixir.icon : VM level の distribution support & 強制
ScalaScala.icon は根本的な support が無いが強制されない
Akka
いつなんどきでも cluster が使へると云ふ安心感は ScalaScala.icon には無い
Akka が常に有るので、そうでもない
1,000~10,000 台の cluster (工夫無しに) 作りたいですね→KubernetesKubernetes.icon でやれ
ElixirElixir.icon : 非線形な pattern match
EgisonEgison.iconみたいに正規形を持たない data に對しては、出來ない
ScalaScala.icon は unapply を擴張して出來る。unapply 使へば何でも出來るよ
非線形な match は、match を使ふ側ではなくて unapply に閉じ込めなければなりませんが
少し緩めていいなら幽靈型?
ScalaScala.icon : OOP (JavaJava.icon と話すと基本的に OOP に成る)
implicit
型 class べんりー
ElixirElixir.iconには型が無いので…型 class も無い
simulate する事に成る…
implicit は DI ではない
ElixirElixir.icon にも有りませんが…そんな話ししたな
Composable Context
ScalaScala.icon : GPU、SIMD
流石に ErlangErlang.icon にも欲しい